if (!dojo._hasResource["dojo.regexp"]) { //_hasResource checks added by build. Do not use _hasResource directly in your code.
    dojo._hasResource["dojo.regexp"] = true;
    dojo.provide("dojo.regexp");

    /*=====
     dojo.regexp = {
     // summary: Regular expressions and Builder resources
     };
     =====*/

    dojo.regexp.escapeString = function(/*String*/str, /*String?*/except) {
        //	summary:
        //		Adds escape sequences for special characters in regular expressions
        // except:
        //		a String with special characters to be left unescaped

        //	return str.replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); // string
        return str.replace(/([\.$?*!=:|{}\(\)\[\]\\\/^])/g, function(ch) {
            if (except && except.indexOf(ch) != -1) {
                return ch;
            }
            return "\\" + ch;
        }); // String
    }

    dojo.regexp.buildGroupRE =
    function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture) {
        //	summary:
        //		Builds a regular expression that groups subexpressions
        //	description:
        //		A utility function used by some of the RE generators. The
        //		subexpressions are constructed by the function, re, in the second
        //		parameter.  re builds one subexpression for each elem in the array
        //		a, in the first parameter. Returns a string for a regular
        //		expression that groups all the subexpressions.
        // arr:
        //		A single value or an array of values.
        // re:
        //		A function. Takes one parameter and converts it to a regular
        //		expression.
        // nonCapture:
        //		If true, uses non-capturing match, otherwise matches are retained
        //		by regular expression. Defaults to false

        // case 1: a is a single value.
        if (!(arr instanceof Array)) {
            return re(arr); // String
        }

        // case 2: a is an array
        var b = [];
        for (var i = 0; i < arr.length; i++) {
            // convert each elem to a RE
            b.push(re(arr[i]));
        }

        // join the REs as alternatives in a RE group.
        return dojo.regexp.group(b.join("|"), nonCapture); // String
    }

    dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture) {
        // summary:
        //		adds group match to expression
        // nonCapture:
        //		If true, uses non-capturing match, otherwise matches are retained
        //		by regular expression.
        return "(" + (nonCapture ? "?:" : "") + expression + ")"; // String
    }

}
